package com.cgt.xiaotao.promotion.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cgt.common.domain.dto.PageDTO;
import com.cgt.xiaotao.promotion.domain.dto.CouponDiscountDTO;
import com.cgt.xiaotao.promotion.domain.dto.OrderProductDTO;
import com.cgt.xiaotao.promotion.domain.dto.UserCouponDTO;
import com.cgt.xiaotao.promotion.domain.po.UserCoupon;
import com.cgt.xiaotao.promotion.domain.query.UserCouponQuery;
import com.cgt.xiaotao.promotion.domain.vo.CouponVO;

import java.math.BigDecimal;
import java.util.List;

public interface IUserCouponService extends IService<UserCoupon> {
    /**
     * 领取优惠券
     * @param couponIdS 优惠券ID
     */
    void receiveCoupon(String couponIdS);

    /**
     * 兑换优惠券
     * @param code 兑换码
     */
    void exchangeCoupon(String code);

    /**
     * 查询我的优惠券
     * @param query 查询参数
     * @return PageDTO<CouponVO> 分页数据
     */
    PageDTO<CouponVO> queryMyCouponPage(UserCouponQuery query);

    /**
     * 检测并创建用户优惠券
     * @param uc 用户优惠券信息
     */
    void checkAndCreateUserCoupon(UserCouponDTO uc);

    /**
     * 查询我的优惠券可用方案
     * @return List<CouponDiscountDTO> 可用方案列表
     */
    List<CouponDiscountDTO> findDiscountSolution(List<OrderProductDTO> products);

    /**
     * 根据优惠券ID列表和商品列表获取最大优惠金额
     * @param couponIds 优惠券ID列表
     * @param products 商品列表
     * @return 最大优惠金额，如果用户没有优惠券则返回null
     */
    BigDecimal getMaxDiscountAmount(List<Long> couponIds, List<OrderProductDTO> products);

    /**
     * 删除用户使用的优惠券
     * @param id 优惠券ID
     * @return 操作结果
     */
    Boolean deleteUserCoupon(Long id);


}
